const obj = {
	fn1: () => console.log(this),
	fn2: function() {console.log(this)}
}

obj.fn1();
obj.fn2();

// const x = new obj.fn1();
// const y = new obj.fn2();


// var name = '123';

// var obj = {
// 	name: '456',
// 	print: function() {
//         console.log(this);
// 		function a() {
//             console.log(this);
// 			console.log(this.name);
// 		}
// 		a();
// 	}
// }

// obj.print();

// console.log('1---',typeof typeof typeof null);
// console.log('-----------------------------')
// console.log('2----',typeof console.log(1));


// async function async1() {
//     console.log('async1 start');    //2正常代码块
//     await async2();                    //这里的代码会正常执行
//     console.log('async1 endasync1 end');  //放入微任务队列
// }
// async function async2() {
//     console.log('async2');    //async里的代码 也要看是否是异步请求
// }
// console.log('script start');      //1  正常代码块
// setTimeout(function () {          //放入宏任务队列
//     console.log('setTimeout'); 
// }, 0)
// async1();                         //执行函数代码块
// new Promise(function (resolve) {
//     console.log('promise1');
//     resolve();
//     console.log('promise2')
// }).then(function () {
//     console.log('promise3');   //微任务队列
// });
// console.log('script end');



// const arr = [{
//     id: 2,
//     name: '部门B',
//     parentId: 0
// },
// {
//     id: 3,
//     name: '部门C',
//     parentId: 1
// },
// {
//     id: 1,
//     name: '部门A',
//     parentId: 2
// },
// {
//     id: 4,
//     name: '部门D',
//     parentId: 1
// },
// {
//     id: 5,
//     name: '部门E',
//     parentId: 2
// },
// {
//     id: 6,
//     name: '部门F',
//     parentId: 3
// },
// {
//     id: 7,
//     name: '部门G',
//     parentId: 2
// },
// {
//     id: 8,
//     name: '部门H',
//     parentId: 4
// }
// ]


// function test() {
//     let obj = {}
//     arr.forEach(({id,name,parentId}) =>{
//         if(parentId === 0) {
//             obj.id = id
//             obj.name = name
//             obj.parentId = parentId
//             obj.children = []
//             arrayToTree(id,arr,obj.children)
//         }
//     })
//     console.log(1)
//     console.log(obj)
// }

// function arrayToTree(topId,arr,topList) {
//     // 递归退出条件

//     arr.forEach(({id,name,parentId}) =>{
//         if(parentId === topId) {
//             let obj = {}
//             obj.id = id
//             obj.name = name
//             obj.parentId = parentId
//             topList.push(obj)
//             obj.children = []
//             arrayToTree(id,arr,obj.children)

//             console.log(obj)
//         }
//     })
// }
// test()

// var Fn = {};
// Fn.method = function(){
//     this.name = 'jack';
//     function test(){
//       console.log(this === window);
//     }
//     test();
// }
// Fn.method();//true


// const A = [1,2,3];
// const B = [4,5,6];
// const C = [7,8,9];

// function test1(num) {

//    let isA =  A.some(item =>{return item === num})
//    let isB =  B.some(item =>{return item === num})
//    let isC =  C.some(item =>{return item === num})

//     if(isA) {
//         console.log('A')
//     }else if(isB) {
//         console.log('B')
//     }else if(isC) {
//         console.log('C')
//     }else {
//         console.log('未查找到')
//     }
// }

// test1(12)

// var b = 10;
// (function b(){
//     b = 20;
//     console.log(b);
// })();

// 在node环境下   不存在window
// var name = '123';

// var obj = {
// 	name: '456',
// 	print: function() {
// 		function a() {
//             console.log(this)
// 			console.log(this.name);
// 		}
// 		a();
// 	}
// }

// obj.print();

// 间隔输出
// function createRepeat(fn, repeat, interval) {


// }

// const fn = createRepeat(console.log, 3, 4);

// fn('helloWorld'); // 每4秒输出一次helloWorld, 输出3次

// var a=3;
//  function c(){
//     console.log(a);
//  }
//  (function(){
//   var a=4;
//   c();
//  })();



//  setTimeout(function () {
//     console.log(1);
//   }, 100);
  
//   new Promise(function (resolve) {
//     console.log(2);
//     resolve();
//     console.log(3);
//   }).then(function () {
//     console.log(4);
//     new Promise((resove, reject) => {
//       console.log(5);
//       setTimeout(() =>  {
//         console.log(6);
//       }, 10);
//     })
//   });
//   console.log(7);
//   console.log(8);
  


// function Foo(){
//     Foo.a = function(){
//         console.log(1);
//     }
//     this.a = function(){
//         console.log(2)
//     }
// }

// Foo.prototype.a = function(){
//     console.log(3);
// }
// Foo.a = function(){
//     console.log(4);
// }

// Foo.a();
// let obj = new Foo();
// obj.a();
// Foo.a();
// Foo.prototype.a()
// obj.__proto__.a()




// console.log(false && 1 && []); // false
// console.log(" " && true && 5); // 5

// if(value){
//     console.log(value)
//    }
// value && console.log(value)
// 逻辑与的优先级是高于逻辑或的
// 比如 console.log(3||2&&5||0)，会先算 2 && 5 的值为 5，然后再 3||5----3，最后再 3||0----3，所以最终结果为 3。

// 十个高阶函数
// forEach()  map()  reduce()  filter()    some() every() find()  findIndex()  reduceRight()  sort()




// 浅拷贝和深拷贝

function copy(val) {
    const newVal = {}
    for(let i in val) {
        newVal[i] = val[i]
    }
    return newVal
}

let deepCopy = function(orign,newData) {

    let obj = newData?newData:{}
    for(let i in orign) {
        if(typeof orign[i] === 'object') {
            let nData = orign[i] instanceof Array?[]:{}
            deepCopy(orign[i],nData)

        }else {
            obj[i] = orign[i]
        }
    }
    return obj
}

let obj2 = {
    name:'梁鹏',
    age:12,
    habit:[
        {name:'basketball'},
        {name:'football'}

    ],
    aaa:{
        'hell':1
    }
}
// console.log(deepCopy(obj2))

function wrapperFun() {
    let a = 1
    return function() {
        a++
        console.log(a)
    }
}

let innerFun = wrapperFun()
// innerFun()
// innerFun()




// 

